
// 创建一个新对象，将this绑定到新创建的对象
// 使用传入的参数调用构造函数
// 将创建的对象的_proto__指向构造函数的prototype
// 如果构造函数没有显式返回一个对象，则返回创建的新对象，否则返回显式返回的对象（如上文的{ }）


// 补充：构造函数会隐式的返回一个对象出来，这个对象就是此时this指针指向的对象。 若显示返回的类型为引用数据类型则返回，否走会忽略直接返回默认的对象
var _myNew = function (constructor, ...args) {
    // 1. 创建一个新对象obj
    const obj = {};

    //2. 将this绑定到新对象上，并使用传入的参数调用函数

    //这里是为了拿到第一个参数，就是传入的构造函数
    // let constructor = Array.prototype.shift.call(arguments);
    //绑定this的同时调用函数,...将参数展开传入
    let res = constructor.call(obj, ...args)

    //3. 将创建的对象的_proto__指向构造函数的prototype
    obj.__proto__ = constructor.prototype

    //4. 根据显示返回的值判断最终返回结果
    return res instanceof Object ? res : obj;  // 判断res 是否为对象，若是显示的返回对象，则返回显示对象。若显示返回的不是对象，直接返回默认的当前创建的对象obj
}





